home *** CD-ROM | disk | FTP | other *** search
- program RunTime213;
-
- {
- Written by: Michele Mottini
- TERA S.r.l.
- CIS 100040,615
-
- }
- uses
- WinCrt,
- WinTypes,
- WinProcs,
- Objects;
-
- {-------------------- Class TErrCollection : collection with error management }
-
- {
- You can freely descend your own collection from TErrCollection getting
- automatically enhanced run time error management.
- }
-
- type
- PErrCollection = ^TErrCollection;
- TErrCollection = object(TCollection)
- procedure Error(Code,Info : integer); virtual;
- end;
-
- procedure TErrCollection.Error(Code,Info : integer);
- var
- ErrDesc : record
- ErrCode : integer;
- ErrPosHi : word;
- ErrPosLo : word;
- ErrIndex : integer;
- ErrCount : integer;
- end;
- Buffer : array[0..80] of char;
- begin
- asm
- mov cx,[BP+20]
- mov bx,[BP+22]
- verr bx
- je @1
- mov bx,$FFFF
- mov cx,bx
- jmp @2
- @1:
- mov es,bx
- mov bx,word ptr es:0
- @2:
- mov ErrDesc.ErrPosLo,cx
- mov ErrDesc.ErrPosHi,bx
- end;
- ErrDesc.ErrCode := 212-Code;
- ErrDesc.ErrIndex := Info;
- ErrDesc.ErrCount := Count;
- WVSPrintF(Buffer,'Runtime error %d at %04X:%04X with index %d; Count=%d',ErrDesc);
- MessageBox(0,Buffer,nil,mb_Ok or mb_SystemModal);
- halt(0);
- end; { Error }
-
- {----------------------------------------------------------------------- Main }
-
- var
- TestColl : TErrCollection;
-
- begin
- TestColl.Init(16,8);
- writeln('Now the program call the At() function with an invalid index');
- writeln('causing a R/Time error 213');
- writeln;
- writeln('If you try to find the error position from the address you will');
- writeln('go to the correct line!');
- TestColl.At(1); { Wrong index: we will get a 213 R/Time error }
- TestColl.Done;
- end.